package cn.iocoder.yudao;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class test {


    public class HmacSha1Util {

        /**
 * 生成 HMAC-SHA1 签名（转十六进制并大写）
 * @param data 待签名的原始数据（对应题目中的 s）
 * @param secretKey 签名密钥（对应题目中的 secretKey）
 * @return 大写的十六进制签名字符串
 * @throws NoSuchAlgorithmException 当请求的 Mac 算法不可用时抛出
 * @throws InvalidKeyException 当密钥无效时抛出
 */
public static String generateHmacSha1Signature(String data, String secretKey)
        throws NoSuchAlgorithmException, InvalidKeyException {

    // 校验参数非空
    Objects.requireNonNull(data, "待签名数据不能为空");
    Objects.requireNonNull(secretKey, "签名密钥不能为空");

    if (secretKey.isEmpty()) {
        throw new IllegalArgumentException("签名密钥不能为空字符串");
    }

    // 初始化 HMAC-SHA1 算法
    Mac mac = Mac.getInstance("HmacSHA256");
    SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA1");
    mac.init(secretKeySpec);

    // 计算 HMAC 值
    byte[] hmacBytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));

    // 字节数组转十六进制字符串并大写（预分配容量提升性能）
    StringBuilder hexBuilder = new StringBuilder(40); // HMAC-SHA1 结果恒为20字节 => 40字符
    for (byte b : hmacBytes) {
        String hex = Integer.toHexString(0xFF & b);
        if (hex.length() == 1) {
            hexBuilder.append('0');
        }
        hexBuilder.append(hex);
    }
    return hexBuilder.toString().toUpperCase();
}

    }
    public static void main(String[] args) {
        try {
            // 示例：假设 data 是合并后的签名因子，secretKey 是对应 appKey 的密钥
            String data = "param2/1/com.alibaba.product/alibaba.product.list.get/6075937";
            String secretKey = "ApdASmjV6q";
           // String signature = HmacSha1Util.generateHmacSha1Signature(data, secretKey);
            //System.out.println("生成的签名：" + signature);
            Map<String, String> params = new HashMap<>();
            params.put("access_token", "9d58b3d6-15df-437b-98c4-3f8795ec2388");
            params.put("pageNo", "1");
            params.put("pageSize", "20");
            String s=ApiCallService.callApiTest("https://gw.open.1688.com/openapi/", "param2/1/com.alibaba.product/alibaba.product.list.get/6075937", secretKey, params);
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

        // 测试方法



